<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/fixmap.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/fixmap.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/*</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> * fixmap.h: compile-time virtual memory allocation</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> *</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> * This file is subject to the terms and conditions of the GNU General Public</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * License.  See the file &quot;COPYING&quot; in the main directory of this archive</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * for more details.</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> *</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * Copyright (C) 1998 Ingo Molnar</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> *</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> * x86_32 and x86_64 integration by Gustavo F. Padovan, February 2009</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> */</span>
<a name="13" /><span class="True">      13:</span> 
<a name="14" /><span class="Maybe">      14:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfRklYTUFQX0hfMA__"><span class="b">_ASM_X86_FIXMAP_H</span></a>
<a name="15" /><span class="Maybe">      15:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfRklYTUFQX0hfMA__"><span class="b">_ASM_X86_FIXMAP_H</span></a>
<a name="16" /><span class="Maybe">      16:</span> 
<a name="17" /><span class="Maybe">      17:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">kernel</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="19" /><span class="Maybe">      19:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">acpi</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="20" /><span class="Maybe">      20:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">apicdef</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="21" /><span class="Maybe">      21:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">page</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">pvclock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="23" /><span class="False">      23:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="24" /><span class="False">      24:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">threads</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="25" /><span class="False">      25:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">kmap_types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="f">#</span><span class="n">else</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">vsyscall</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">#</span><span class="n">endif</span>
<a name="29" /><span class="Maybe">      29:</span> 
<a name="30" /><span class="Maybe">      30:</span> <span class="k">/*</span>
<a name="31" /><span class="Maybe">      31:</span> <span class="k"> * We can&apos;t declare FIXADDR_TOP as variable for x86_64 because vsyscall</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="k"> * uses fixmaps that relies on FIXADDR_TOP for proper address calculation.</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k"> * Because of this, FIXADDR_TOP x86 integration was left as later work.</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="k"> */</span>
<a name="35" /><span class="False">      35:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="36" /><span class="False">      36:</span> <span class="k">/* used by vmalloc.c, vsyscall.lds.S.</span>
<a name="37" /><span class="False">      37:</span> <span class="k"> *</span>
<a name="38" /><span class="False">      38:</span> <span class="k"> * Leave one empty page between vmalloc&apos;ed areas and</span>
<a name="39" /><span class="False">      39:</span> <span class="k"> * the start of the fixmap.</span>
<a name="40" /><span class="False">      40:</span> <span class="k"> */</span>
<a name="41" /><span class="False">      41:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">__FIXADDR_TOP</span><span class="f">;</span>
<a name="42" /><span class="False">      42:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">__FIXADDR_TOP</span><span class="f">)</span>
<a name="43" /><span class="False">      43:</span> 
<a name="44" /><span class="False">      44:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9VU0VSX1NUQVJUXzA_"><span class="b">FIXADDR_USER_START</span></a>     <a href="cpu.c_macros_ref.html#_X19maXhfdG9fdmlydF8w"><span class="b">__fix_to_virt</span></a><span class="f">(</span><span class="b">FIX_VDSO</span><span class="f">)</span>
<a name="45" /><span class="False">      45:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9VU0VSX0VORF8w"><span class="b">FIXADDR_USER_END</span></a>       <a href="cpu.c_macros_ref.html#_X19maXhfdG9fdmlydF8w"><span class="b">__fix_to_virt</span></a><span class="f">(</span><span class="b">FIX_VDSO</span> <span class="f">-</span> <span class="c">1</span><span class="f">)</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="f">#</span><span class="n">else</span>
<a name="47" /><span class="Maybe">      47:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a>    <span class="f">(</span><a href="cpu.c_macros_ref.html#_VlNZU0NBTExfRU5EXzA_"><span class="b">VSYSCALL_END</span></a><span class="f">-</span><a href="cpu.c_macros_ref.html#_UEFHRV9TSVpFXzA_"><span class="b">PAGE_SIZE</span></a><span class="f">)</span>
<a name="48" /><span class="Maybe">      48:</span> 
<a name="49" /><span class="Maybe">      49:</span> <span class="k">/* Only covers 32bit vsyscalls currently. Need another set for 64bit. */</span>
<a name="50" /><span class="Maybe">      50:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9VU0VSX1NUQVJUXzA_"><span class="b">FIXADDR_USER_START</span></a>    <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">VSYSCALL32_VSYSCALL</span><span class="f">)</span>
<a name="51" /><span class="Maybe">      51:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9VU0VSX0VORF8w"><span class="b">FIXADDR_USER_END</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_RklYQUREUl9VU0VSX1NUQVJUXzA_"><span class="b">FIXADDR_USER_START</span></a> <span class="f">+</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSVpFXzA_"><span class="b">PAGE_SIZE</span></a><span class="f">)</span>
<a name="52" /><span class="Maybe">      52:</span> <span class="f">#</span><span class="n">endif</span>
<a name="53" /><span class="Maybe">      53:</span> 
<a name="54" /><span class="Maybe">      54:</span> 
<a name="55" /><span class="Maybe">      55:</span> <span class="k">/*</span>
<a name="56" /><span class="Maybe">      56:</span> <span class="k"> * Here we define all the compile-time &apos;special&apos; virtual</span>
<a name="57" /><span class="Maybe">      57:</span> <span class="k"> * addresses. The point is to have a constant address at</span>
<a name="58" /><span class="Maybe">      58:</span> <span class="k"> * compile time, but to set the physical address only</span>
<a name="59" /><span class="Maybe">      59:</span> <span class="k"> * in the boot process.</span>
<a name="60" /><span class="Maybe">      60:</span> <span class="k"> * for x86_32: We allocate these special addresses</span>
<a name="61" /><span class="Maybe">      61:</span> <span class="k"> * from the end of virtual memory (0xfffff000) backwards.</span>
<a name="62" /><span class="Maybe">      62:</span> <span class="k"> * Also this lets us do fail-safe vmalloc(), we</span>
<a name="63" /><span class="Maybe">      63:</span> <span class="k"> * can guarantee that these special addresses and</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="k"> * vmalloc()-ed addresses never overlap.</span>
<a name="65" /><span class="Maybe">      65:</span> <span class="k"> *</span>
<a name="66" /><span class="Maybe">      66:</span> <span class="k"> * These &apos;compile-time allocated&apos; memory buffers are</span>
<a name="67" /><span class="Maybe">      67:</span> <span class="k"> * fixed-size 4k pages (or larger if used with an increment</span>
<a name="68" /><span class="Maybe">      68:</span> <span class="k"> * higher than 1). Use set_fixmap(idx,phys) to associate</span>
<a name="69" /><span class="Maybe">      69:</span> <span class="k"> * physical memory with fixmap indices.</span>
<a name="70" /><span class="Maybe">      70:</span> <span class="k"> *</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="k"> * TLB entries of such buffers will not be flushed across</span>
<a name="72" /><span class="Maybe">      72:</span> <span class="k"> * task switches.</span>
<a name="73" /><span class="Maybe">      73:</span> <span class="k"> */</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="m">enum</span> <span class="b">fixed_addresses</span> <span class="f">{</span>
<a name="75" /><span class="False">      75:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="76" /><span class="False">      76:</span>     <span class="b">FIX_HOLE</span><span class="f">,</span>
<a name="77" /><span class="False">      77:</span>     <span class="b">FIX_VDSO</span><span class="f">,</span>
<a name="78" /><span class="Maybe">      78:</span> <span class="f">#</span><span class="n">else</span>
<a name="79" /><span class="Maybe">      79:</span>     <span class="b">VSYSCALL_LAST_PAGE</span><span class="f">,</span>
<a name="80" /><span class="Maybe">      80:</span>     <span class="b">VSYSCALL_FIRST_PAGE</span> <span class="f">=</span> <span class="b">VSYSCALL_LAST_PAGE</span>
<a name="81" /><span class="Maybe">      81:</span>                 <span class="f">+</span> <span class="f">(</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_VlNZU0NBTExfRU5EXzA_"><span class="b">VSYSCALL_END</span></a><span class="f">-</span><a href="cpu.c_macros_ref.html#_VlNZU0NBTExfU1RBUlRfMA__"><span class="b">VSYSCALL_START</span></a><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span> <span class="f">-</span> <span class="c">1</span><span class="f">,</span>
<a name="82" /><span class="Maybe">      82:</span>     <span class="b">VVAR_PAGE</span><span class="f">,</span>
<a name="83" /><span class="Maybe">      83:</span>     <span class="b">VSYSCALL_HPET</span><span class="f">,</span>
<a name="84" /><span class="False">      84:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PARAVIRT_CLOCK</span>
<a name="85" /><span class="False">      85:</span>     <span class="b">PVCLOCK_FIXMAP_BEGIN</span><span class="f">,</span>
<a name="86" /><span class="False">      86:</span>     <span class="b">PVCLOCK_FIXMAP_END</span> <span class="f">=</span> <span class="b">PVCLOCK_FIXMAP_BEGIN</span><span class="f">+</span><a href="cpu.c_macros_noref.html#_UFZDTE9DS19WU1lTQ0FMTF9OUl9QQUdFU18w"><span class="b">PVCLOCK_VSYSCALL_NR_PAGES</span></a><span class="f">-</span><span class="c">1</span><span class="f">,</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="f">#</span><span class="n">endif</span>
<a name="88" /><span class="Maybe">      88:</span> <span class="f">#</span><span class="n">endif</span>
<a name="89" /><span class="Maybe">      89:</span>     <span class="b">FIX_DBGP_BASE</span><span class="f">,</span>
<a name="90" /><span class="Maybe">      90:</span>     <span class="b">FIX_EARLYCON_MEM_BASE</span><span class="f">,</span>
<a name="91" /><span class="False">      91:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PROVIDE_OHCI1394_DMA_INIT</span>
<a name="92" /><span class="False">      92:</span>     <span class="b">FIX_OHCI1394_BASE</span><span class="f">,</span>
<a name="93" /><span class="Maybe">      93:</span> <span class="f">#</span><span class="n">endif</span>
<a name="94" /><span class="Maybe">      94:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9MT0NBTF9BUElDXzA_"><span class="b">CONFIG_X86_LOCAL_APIC</span></a>
<a name="95" /><span class="Maybe">      95:</span>     <span class="b">FIX_APIC_BASE</span><span class="f">,</span>    <span class="k">/* local (CPU) APIC) -- required for SMP or not */</span>
<a name="96" /><span class="Maybe">      96:</span> <span class="f">#</span><span class="n">endif</span>
<a name="97" /><span class="Maybe">      97:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9JT19BUElDXzA_"><span class="b">CONFIG_X86_IO_APIC</span></a>
<a name="98" /><span class="Maybe">      98:</span>     <span class="b">FIX_IO_APIC_BASE_0</span><span class="f">,</span>
<a name="99" /><span class="Maybe">      99:</span>     <span class="b">FIX_IO_APIC_BASE_END</span> <span class="f">=</span> <span class="b">FIX_IO_APIC_BASE_0</span> <span class="f">+</span> <a href="cpu.c_macros_ref.html#_TUFYX0lPX0FQSUNTXzA_"><span class="b">MAX_IO_APICS</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">,</span>
<a name="100" /><span class="Maybe">     100:</span> <span class="f">#</span><span class="n">endif</span>
<a name="101" /><span class="False">     101:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_VISWS_APIC</span>
<a name="102" /><span class="False">     102:</span>     <span class="b">FIX_CO_CPU</span><span class="f">,</span>    <span class="k">/* Cobalt timer */</span>
<a name="103" /><span class="False">     103:</span>     <span class="b">FIX_CO_APIC</span><span class="f">,</span>    <span class="k">/* Cobalt APIC Redirection Table */</span>
<a name="104" /><span class="False">     104:</span>     <span class="b">FIX_LI_PCIA</span><span class="f">,</span>    <span class="k">/* Lithium PCI Bridge A */</span>
<a name="105" /><span class="False">     105:</span>     <span class="b">FIX_LI_PCIB</span><span class="f">,</span>    <span class="k">/* Lithium PCI Bridge B */</span>
<a name="106" /><span class="Maybe">     106:</span> <span class="f">#</span><span class="n">endif</span>
<a name="107" /><span class="Maybe">     107:</span>     <span class="b">FIX_RO_IDT</span><span class="f">,</span>    <span class="k">/* Virtual mapping for read-only IDT */</span>
<a name="108" /><span class="False">     108:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="109" /><span class="False">     109:</span>     <span class="b">FIX_KMAP_BEGIN</span><span class="f">,</span>    <span class="k">/* reserved pte&apos;s for temporary kernel mappings */</span>
<a name="110" /><span class="False">     110:</span>     <span class="b">FIX_KMAP_END</span> <span class="f">=</span> <span class="b">FIX_KMAP_BEGIN</span><span class="f">+</span><span class="f">(</span><span class="b">KM_TYPE_NR</span><span class="f">*</span><a href="cpu.c_macros_ref.html#_TlJfQ1BVU18w"><span class="b">NR_CPUS</span></a><span class="f">)</span><span class="f">-</span><span class="c">1</span><span class="f">,</span>
<a name="111" /><span class="False">     111:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BDSV9NTUNPTkZJR18w"><span class="b">CONFIG_PCI_MMCONFIG</span></a>
<a name="112" /><span class="False">     112:</span>     <span class="b">FIX_PCIE_MCFG</span><span class="f">,</span>
<a name="113" /><span class="False">     113:</span> <span class="f">#</span><span class="n">endif</span>
<a name="114" /><span class="Maybe">     114:</span> <span class="f">#</span><span class="n">endif</span>
<a name="115" /><span class="False">     115:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="116" /><span class="False">     116:</span>     <span class="b">FIX_PARAVIRT_BOOTMAP</span><span class="f">,</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="f">#</span><span class="n">endif</span>
<a name="118" /><span class="Maybe">     118:</span>     <span class="b">FIX_TEXT_POKE1</span><span class="f">,</span>    <span class="k">/* reserve 2 pages for text_poke() */</span>
<a name="119" /><span class="Maybe">     119:</span>     <span class="b">FIX_TEXT_POKE0</span><span class="f">,</span> <span class="k">/* first page is last, because allocation is backward */</span>
<a name="120" /><span class="False">     120:</span> <span class="f">#</span><span class="n">ifdef</span>    <span class="b">CONFIG_X86_INTEL_MID</span>
<a name="121" /><span class="False">     121:</span>     <span class="b">FIX_LNW_VRTC</span><span class="f">,</span>
<a name="122" /><span class="Maybe">     122:</span> <span class="f">#</span><span class="n">endif</span>
<a name="123" /><span class="Maybe">     123:</span>     <span class="b">__end_of_permanent_fixed_addresses</span><span class="f">,</span>
<a name="124" /><span class="Maybe">     124:</span> 
<a name="125" /><span class="Maybe">     125:</span>     <span class="k">/*</span>
<a name="126" /><span class="Maybe">     126:</span> <span class="k">     * 256 temporary boot-time mappings, used by early_ioremap(),</span>
<a name="127" /><span class="Maybe">     127:</span> <span class="k">     * before ioremap() is functional.</span>
<a name="128" /><span class="Maybe">     128:</span> <span class="k">     *</span>
<a name="129" /><span class="Maybe">     129:</span> <span class="k">     * If necessary we round it up to the next 256 pages boundary so</span>
<a name="130" /><span class="Maybe">     130:</span> <span class="k">     * that we can have a single pgd entry and a single pte table:</span>
<a name="131" /><span class="Maybe">     131:</span> <span class="k">     */</span>
<a name="132" /><span class="Maybe">     132:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TlJfRklYX0JUTUFQU18w"><span class="b">NR_FIX_BTMAPS</span></a>        <span class="c">64</span>
<a name="133" /><span class="Maybe">     133:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RklYX0JUTUFQU19TTE9UU18w"><span class="b">FIX_BTMAPS_SLOTS</span></a>    <span class="c">4</span>
<a name="134" /><span class="Maybe">     134:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_VE9UQUxfRklYX0JUTUFQU18w"><span class="b">TOTAL_FIX_BTMAPS</span></a>    <span class="f">(</span><a href="cpu.c_macros_ref.html#_TlJfRklYX0JUTUFQU18w"><span class="b">NR_FIX_BTMAPS</span></a> <span class="f">*</span> <a href="cpu.c_macros_ref.html#_RklYX0JUTUFQU19TTE9UU18w"><span class="b">FIX_BTMAPS_SLOTS</span></a><span class="f">)</span>
<a name="135" /><span class="Maybe">     135:</span>     <span class="b">FIX_BTMAP_END</span> <span class="f">=</span>
<a name="136" /><span class="Maybe">     136:</span>      <span class="f">(</span><span class="b">__end_of_permanent_fixed_addresses</span> <span class="f">^</span>
<a name="137" /><span class="Maybe">     137:</span>       <span class="f">(</span><span class="b">__end_of_permanent_fixed_addresses</span> <span class="f">+</span> <a href="cpu.c_macros_ref.html#_VE9UQUxfRklYX0JUTUFQU18w"><span class="b">TOTAL_FIX_BTMAPS</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span> <span class="f">&amp;</span>
<a name="138" /><span class="Maybe">     138:</span>      <span class="f">-</span><a href="cpu.c_macros_ref.html#_UFRSU19QRVJfUFRFXzA_"><span class="b">PTRS_PER_PTE</span></a>
<a name="139" /><span class="Maybe">     139:</span>      <span class="f">?</span> <span class="b">__end_of_permanent_fixed_addresses</span> <span class="f">+</span> <a href="cpu.c_macros_ref.html#_VE9UQUxfRklYX0JUTUFQU18w"><span class="b">TOTAL_FIX_BTMAPS</span></a> <span class="f">-</span>
<a name="140" /><span class="Maybe">     140:</span>        <span class="f">(</span><span class="b">__end_of_permanent_fixed_addresses</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_VE9UQUxfRklYX0JUTUFQU18w"><span class="b">TOTAL_FIX_BTMAPS</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span>
<a name="141" /><span class="Maybe">     141:</span>      <span class="f">:</span> <span class="b">__end_of_permanent_fixed_addresses</span><span class="f">,</span>
<a name="142" /><span class="Maybe">     142:</span>     <span class="b">FIX_BTMAP_BEGIN</span> <span class="f">=</span> <span class="b">FIX_BTMAP_END</span> <span class="f">+</span> <a href="cpu.c_macros_ref.html#_VE9UQUxfRklYX0JUTUFQU18w"><span class="b">TOTAL_FIX_BTMAPS</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">,</span>
<a name="143" /><span class="False">     143:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="144" /><span class="False">     144:</span>     <span class="b">FIX_WP_TEST</span><span class="f">,</span>
<a name="145" /><span class="Maybe">     145:</span> <span class="f">#</span><span class="n">endif</span>
<a name="146" /><span class="Maybe">     146:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX0lOVEVMX1RYVF8w"><span class="b">CONFIG_INTEL_TXT</span></a>
<a name="147" /><span class="Maybe">     147:</span>     <span class="b">FIX_TBOOT_BASE</span><span class="f">,</span>
<a name="148" /><span class="Maybe">     148:</span> <span class="f">#</span><span class="n">endif</span>
<a name="149" /><span class="Maybe">     149:</span>     <span class="b">__end_of_fixed_addresses</span>
<a name="150" /><span class="Maybe">     150:</span> <span class="f">}</span><span class="f">;</span>
<a name="151" /><span class="Maybe">     151:</span> 
<a name="152" /><span class="Maybe">     152:</span> 
<a name="153" /><span class="Maybe">     153:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">reserve_top_address</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">reserve</span><span class="f">)</span><span class="f">;</span>
<a name="154" /><span class="Maybe">     154:</span> 
<a name="155" /><span class="Maybe">     155:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9TSVpFXzA_"><span class="b">FIXADDR_SIZE</span></a>    <span class="f">(</span><span class="b">__end_of_permanent_fixed_addresses</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="156" /><span class="Maybe">     156:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9CT09UX1NJWkVfMA__"><span class="b">FIXADDR_BOOT_SIZE</span></a>    <span class="f">(</span><span class="b">__end_of_fixed_addresses</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9TVEFSVF8w"><span class="b">FIXADDR_START</span></a>        <span class="f">(</span><a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9TSVpFXzA_"><span class="b">FIXADDR_SIZE</span></a><span class="f">)</span>
<a name="158" /><span class="Maybe">     158:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9CT09UX1NUQVJUXzA_"><span class="b">FIXADDR_BOOT_START</span></a>    <span class="f">(</span><a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a> <span class="f">-</span> <a href="cpu.c_macros_noref.html#_RklYQUREUl9CT09UX1NJWkVfMA__"><span class="b">FIXADDR_BOOT_SIZE</span></a><span class="f">)</span>
<a name="159" /><span class="Maybe">     159:</span> 
<a name="160" /><span class="Maybe">     160:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">fixmaps_set</span><span class="f">;</span>
<a name="161" /><span class="Maybe">     161:</span> 
<a name="162" /><span class="Maybe">     162:</span> <span class="m">extern</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">kmap_pte</span><span class="f">;</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="m">extern</span> <span class="b">pgprot_t</span> <span class="b">kmap_prot</span><span class="f">;</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="m">extern</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">pkmap_page_table</span><span class="f">;</span>
<a name="165" /><span class="Maybe">     165:</span> 
<a name="166" /><span class="Maybe">     166:</span> <span class="m">void</span> <span class="b">__native_set_fixmap</span><span class="f">(</span><span class="m">enum</span> <span class="b">fixed_addresses</span> <span class="b">idx</span><span class="f">,</span> <span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span><span class="f">;</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="m">void</span> <span class="b">native_set_fixmap</span><span class="f">(</span><span class="m">enum</span> <span class="b">fixed_addresses</span> <span class="b">idx</span><span class="f">,</span>
<a name="168" /><span class="Maybe">     168:</span>                <span class="b">phys_addr_t</span> <span class="b">phys</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="169" /><span class="Maybe">     169:</span> 
<a name="170" /><span class="Maybe">     170:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="171" /><span class="Maybe">     171:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__set_fixmap</span><span class="f">(</span><span class="m">enum</span> <span class="b">fixed_addresses</span> <span class="b">idx</span><span class="f">,</span>
<a name="172" /><span class="Maybe">     172:</span>                 <span class="b">phys_addr_t</span> <span class="b">phys</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">flags</span><span class="f">)</span>
<a name="173" /><span class="Maybe">     173:</span> <span class="f">{</span>
<a name="174" /><span class="Maybe">     174:</span>     <span class="b">native_set_fixmap</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="f">}</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="f">#</span><span class="n">endif</span>
<a name="177" /><span class="Maybe">     177:</span> 
<a name="178" /><span class="Maybe">     178:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X2ZpeG1hcF8w"><span class="b">set_fixmap</span></a><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">)</span>                \
<a name="179" /><span class="Maybe">     179:</span>     <span class="b">__set_fixmap</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_UEFHRV9LRVJORUxfMA__"><span class="b">PAGE_KERNEL</span></a><span class="f">)</span>
<a name="180" /><span class="Maybe">     180:</span> 
<a name="181" /><span class="Maybe">     181:</span> <span class="k">/*</span>
<a name="182" /><span class="Maybe">     182:</span> <span class="k"> * Some hardware wants to get fixmapped without caching.</span>
<a name="183" /><span class="Maybe">     183:</span> <span class="k"> */</span>
<a name="184" /><span class="Maybe">     184:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X2ZpeG1hcF9ub2NhY2hlXzA_"><span class="b">set_fixmap_nocache</span></a><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">)</span>            \
<a name="185" /><span class="Maybe">     185:</span>     <span class="b">__set_fixmap</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_UEFHRV9LRVJORUxfTk9DQUNIRV8w"><span class="b">PAGE_KERNEL_NOCACHE</span></a><span class="f">)</span>
<a name="186" /><span class="Maybe">     186:</span> 
<a name="187" /><span class="Maybe">     187:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y2xlYXJfZml4bWFwXzA_"><span class="b">clear_fixmap</span></a><span class="f">(</span><span class="b">idx</span><span class="f">)</span>            \
<a name="188" /><span class="Maybe">     188:</span>     <span class="b">__set_fixmap</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X19wZ3Byb3RfMA__"><span class="b">__pgprot</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="189" /><span class="Maybe">     189:</span> 
<a name="190" /><span class="Maybe">     190:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19maXhfdG9fdmlydF8w"><span class="b">__fix_to_virt</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="f">(</span><a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a> <span class="f">-</span> <span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span><span class="f">)</span>
<a name="191" /><span class="Maybe">     191:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X192aXJ0X3RvX2ZpeF8w"><span class="b">__virt_to_fix</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a> <span class="f">-</span> <span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">&amp;</span><a href="cpu.c_macros_ref.html#_UEFHRV9NQVNLXzA_"><span class="b">PAGE_MASK</span></a><span class="f">)</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="192" /><span class="Maybe">     192:</span> 
<a name="193" /><span class="Maybe">     193:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__this_fixmap_does_not_exist</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="194" /><span class="Maybe">     194:</span> 
<a name="195" /><span class="Maybe">     195:</span> <span class="k">/*</span>
<a name="196" /><span class="Maybe">     196:</span> <span class="k"> * &apos;index to address&apos; translation. If anyone tries to use the idx</span>
<a name="197" /><span class="Maybe">     197:</span> <span class="k"> * directly without translation, we catch the bug with a NULL-deference</span>
<a name="198" /><span class="Maybe">     198:</span> <span class="k"> * kernel oops. Illegal ranges of incoming indices are caught too.</span>
<a name="199" /><span class="Maybe">     199:</span> <span class="k"> */</span>
<a name="200" /><span class="Maybe">     200:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">fix_to_virt</span><span class="f">(</span><span class="m">const</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">idx</span><span class="f">)</span>
<a name="201" /><span class="Maybe">     201:</span> <span class="f">{</span>
<a name="202" /><span class="Maybe">     202:</span>     <span class="k">/*</span>
<a name="203" /><span class="Maybe">     203:</span> <span class="k">     * this branch gets completely eliminated after inlining,</span>
<a name="204" /><span class="Maybe">     204:</span> <span class="k">     * except when someone tries to use fixaddr indices in an</span>
<a name="205" /><span class="Maybe">     205:</span> <span class="k">     * illegal way. (such as mixing up address types or using</span>
<a name="206" /><span class="Maybe">     206:</span> <span class="k">     * out-of-range indices).</span>
<a name="207" /><span class="Maybe">     207:</span> <span class="k">     *</span>
<a name="208" /><span class="Maybe">     208:</span> <span class="k">     * If it doesn&apos;t get removed, the linker will complain</span>
<a name="209" /><span class="Maybe">     209:</span> <span class="k">     * loudly with a reasonably clear error message..</span>
<a name="210" /><span class="Maybe">     210:</span> <span class="k">     */</span>
<a name="211" /><span class="Maybe">     211:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">idx</span> <span class="f">&gt;=</span> <span class="b">__end_of_fixed_addresses</span><span class="f">)</span>
<a name="212" /><span class="Maybe">     212:</span>         <span class="b">__this_fixmap_does_not_exist</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="213" /><span class="Maybe">     213:</span> 
<a name="214" /><span class="Maybe">     214:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19maXhfdG9fdmlydF8w"><span class="b">__fix_to_virt</span></a><span class="f">(</span><span class="b">idx</span><span class="f">)</span><span class="f">;</span>
<a name="215" /><span class="Maybe">     215:</span> <span class="f">}</span>
<a name="216" /><span class="Maybe">     216:</span> 
<a name="217" /><span class="Maybe">     217:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">virt_to_fix</span><span class="f">(</span><span class="m">const</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">vaddr</span><span class="f">)</span>
<a name="218" /><span class="Maybe">     218:</span> <span class="f">{</span>
<a name="219" /><span class="Maybe">     219:</span>     <a href="cpu.c_macros_ref.html#_QlVHX09OXzA_"><span class="b">BUG_ON</span></a><span class="f">(</span><span class="b">vaddr</span> <span class="f">&gt;=</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9UT1BfMA__"><span class="b">FIXADDR_TOP</span></a> <span class="f">||</span> <span class="b">vaddr</span> <span class="f">&lt;</span> <a href="cpu.c_macros_ref.html#_RklYQUREUl9TVEFSVF8w"><span class="b">FIXADDR_START</span></a><span class="f">)</span><span class="f">;</span>
<a name="220" /><span class="Maybe">     220:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X192aXJ0X3RvX2ZpeF8w"><span class="b">__virt_to_fix</span></a><span class="f">(</span><span class="b">vaddr</span><span class="f">)</span><span class="f">;</span>
<a name="221" /><span class="Maybe">     221:</span> <span class="f">}</span>
<a name="222" /><span class="Maybe">     222:</span> 
<a name="223" /><span class="Maybe">     223:</span> <span class="k">/* Return an pointer with offset calculated */</span>
<a name="224" /><span class="Maybe">     224:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="m">unsigned</span> <span class="m">long</span>
<a name="225" /><span class="Maybe">     225:</span> <span class="b">__set_fixmap_offset</span><span class="f">(</span><span class="m">enum</span> <span class="b">fixed_addresses</span> <span class="b">idx</span><span class="f">,</span> <span class="b">phys_addr_t</span> <span class="b">phys</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">flags</span><span class="f">)</span>
<a name="226" /><span class="Maybe">     226:</span> <span class="f">{</span>
<a name="227" /><span class="Maybe">     227:</span>     <span class="b">__set_fixmap</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="228" /><span class="Maybe">     228:</span>     <span class="m">return</span> <span class="b">fix_to_virt</span><span class="f">(</span><span class="b">idx</span><span class="f">)</span> <span class="f">+</span> <span class="f">(</span><span class="b">phys</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_UEFHRV9TSVpFXzA_"><span class="b">PAGE_SIZE</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="229" /><span class="Maybe">     229:</span> <span class="f">}</span>
<a name="230" /><span class="Maybe">     230:</span> 
<a name="231" /><span class="Maybe">     231:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X2ZpeG1hcF9vZmZzZXRfMA__"><span class="b">set_fixmap_offset</span></a><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">)</span>            \
<a name="232" /><span class="Maybe">     232:</span>     <span class="b">__set_fixmap_offset</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_UEFHRV9LRVJORUxfMA__"><span class="b">PAGE_KERNEL</span></a><span class="f">)</span>
<a name="233" /><span class="Maybe">     233:</span> 
<a name="234" /><span class="Maybe">     234:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X2ZpeG1hcF9vZmZzZXRfbm9jYWNoZV8w"><span class="b">set_fixmap_offset_nocache</span></a><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">)</span>            \
<a name="235" /><span class="Maybe">     235:</span>     <span class="b">__set_fixmap_offset</span><span class="f">(</span><span class="b">idx</span><span class="f">,</span> <span class="b">phys</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_UEFHRV9LRVJORUxfTk9DQUNIRV8w"><span class="b">PAGE_KERNEL_NOCACHE</span></a><span class="f">)</span>
<a name="236" /><span class="Maybe">     236:</span> 
<a name="237" /><span class="Maybe">     237:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !__ASSEMBLY__ */</span>
<a name="238" /><span class="True">     238:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_FIXMAP_H */</span>
<a name="239" /><span class="True">     239:</span> </pre>
  </body>
</html>
